package llvmir.value.constants;

import java.util.ArrayList;
import java.util.List;

import llvmir.type.IntArrayType;

public class ConstantArray extends Constant {
    private List<ConstantInt> values = new ArrayList<>();
    private int length;

    public ConstantArray(List<Integer> values, int length) {
        super("ConstantArray", new IntArrayType(length));
        if (values != null) {
            for (Integer value : values) {
                this.values.add(new ConstantInt(value));
            }
        }
        this.length = length;
    }

    public List<ConstantInt> getValues() {
        return values;
    }

    @Override
    public String toString() {
        if (values == null || values.size() == 0) {
            return " zeroinitializer";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(" [");
        for (int i = 0; i < values.size(); i++) {
            sb.append(values.get(i).getType());
            sb.append(values.get(i));
            if (i != values.size() - 1) {
                sb.append(", ");
            }
        }
        // 补零
        for (int i = values.size(); i < length; i++) {
            sb.append(", i32 0");
        }
        sb.append("]");
        return sb.toString();
    }

    @Override
    public String toMips() {
        if (values == null || values.size() == 0) {
            return ".word 0:" + length;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(".word ");
        for (int i = 0; i < values.size(); i++) {
            sb.append(values.get(i).getValue());
            if (i != values.size() - 1) {
                sb.append(", ");
            }
        }
        // 补零
        for (int i = values.size(); i < length; i++) {
            sb.append(", 0");
        }
        return sb.toString();
    }

    public boolean isNull() {
        return values == null;
    }

}
